home *** CD-ROM | disk | FTP | other *** search
/ Computer Shopper 125 / Computer Shopper CD-ROM Issue 125 (1998-07)(Dennis Publishing).iso / Business / Dazzler / DAZZLER.Z / dazzler.cab / CVariableTable.class (.txt) < prev    next >
Encoding:
Java Class File  |  1997-11-26  |  20.5 KB  |  1,512 lines

  1. import java.applet.AudioClip;
  2. import java.awt.Graphics;
  3. import java.io.DataInputStream;
  4. import java.util.Date;
  5. import java.util.NoSuchElementException;
  6. import java.util.Random;
  7. import java.util.StringTokenizer;
  8.  
  9. class CVariableTable {
  10.    public static final int V_COURSE_TITLE = 0;
  11.    public static final int V_STUDENT_NAME = 1;
  12.    public static final int V_STUDENT_ID = 2;
  13.    public static final int V_NO_OF_QUESTIONS = 3;
  14.    public static final int V_QUESTIONS_ANSWERED = 4;
  15.    public static final int V_QUESTIONS_CORRECT = 5;
  16.    public static final int V_QUESTIONS_WRONG = 6;
  17.    public static final int V_QUESTIONS_REPEATED = 7;
  18.    public static final int V_PERCENTAGE_CORRECT = 8;
  19.    public static final int V_ACTUAL_TIME = 9;
  20.    public static final int V_ACTUAL_DATE = 10;
  21.    public static final int V_COURSE_TIME = 11;
  22.    public static final int V_TASK_TAG = 12;
  23.    public static final int V_ERROR_MESSAGE = 13;
  24.    public static final int V_ERROR_NUMBER = 14;
  25.    public static final int V_CLICK_X = 15;
  26.    public static final int V_CLICK_Y = 16;
  27.    public static final int V_RELEASE_X = 17;
  28.    public static final int V_RELEASE_Y = 18;
  29.    public static final int V_OBJECT_FROM_X = 19;
  30.    public static final int V_OBJECT_FROM_Y = 20;
  31.    public static final int V_OBJECT_TO_X = 21;
  32.    public static final int V_OBJECT_TO_Y = 22;
  33.    public static final int V_OBJECT_SCALE = 23;
  34.    public static final int V_ICON_OBJECT = 24;
  35.    public static final int V_CURRENT_TASK_TAG = 25;
  36.    public static final int V_PREVIOUS_TASK_TAG = 26;
  37.    public static final int V_CR = 27;
  38.    public static final int V_QUESTION_TIME = 28;
  39.    public static final int FN_LOWER_CASE = 0;
  40.    public static final int FN_UPPER_CASE = 1;
  41.    public static final int FN_STRING_LENGTH = 2;
  42.    public static final int FN_SUB_STRING = 3;
  43.    public static final int FN_STRIP_TRAILING = 4;
  44.    public static final int FN_STRIP_LEADING = 5;
  45.    public static final int FN_FIND = 6;
  46.    public static final int FN_FIND_REVERSE = 7;
  47.    public static final int FN_REPLACE = 8;
  48.    public static final int FN_GET_ELEMENT = 9;
  49.    public static final int FN_FIND_ELEMENT = 10;
  50.    public static final int FN_DELETE_ELEMENT = 11;
  51.    public static final int FN_REPLACE_ELEMENT = 12;
  52.    public static final int FN_INSERT_ELEMENT = 13;
  53.    public static final int FN_ELEMENT_COUNT = 14;
  54.    public static final int FN_RANDOM = 15;
  55.    public static final int FN_GET_CURRENT_TIME = 16;
  56.    public static final int FN_GET_YEAR = 17;
  57.    public static final int FN_GET_MONTH = 18;
  58.    public static final int FN_GET_MONTH_NAME = 19;
  59.    public static final int FN_GET_DAY = 20;
  60.    public static final int FN_GET_DAY_NAME = 21;
  61.    public static final int FN_GET_HOUR = 22;
  62.    public static final int FN_GET_MINUTE = 23;
  63.    public static final int FN_GET_SECOND = 24;
  64.    public static final int FN_GOTO_TASK = 25;
  65.    public static final int FN_IFTHEN = 26;
  66.    public static final int FN_IFTHENELSE = 27;
  67.    public static final int FN_PLAY_SOUND = 28;
  68.    public static final int FN_ABS = 29;
  69.    public static final int FN_INT = 30;
  70.    public static final int FN_SQRT = 31;
  71.    public static final int FN_MOD = 32;
  72.    public static final int FN_ROUND_UP = 33;
  73.    public static final int FN_ROUND_DN = 34;
  74.    public static final int FN_COS = 35;
  75.    public static final int FN_SIN = 36;
  76.    public static final int FN_TAN = 37;
  77.    public static final int FN_ACOS = 38;
  78.    public static final int FN_ASIN = 39;
  79.    public static final int FN_ATAN = 40;
  80.    public static final int FN_EXP = 41;
  81.    public static final int FN_LOG = 42;
  82.    public static final int FN_GET_OBJECT_WIDTH = 43;
  83.    public static final int FN_GET_OBJECT_HEIGHT = 44;
  84.    public static final int FN_REDRAW_WINDOW = 45;
  85.    public static final int FN_RELOAD_OBJECT = 46;
  86.    public static final int EXP_OK = 0;
  87.    public static final int EXP_EMPTY = 1;
  88.    public static final int EXP_ERR_RELATION = 2;
  89.    public static final int EXP_ERR_LOGICAL = 3;
  90.    public static final int EXP_ERR_EXPECT_DATA = 4;
  91.    public static final int EXP_ERR_EXPECT_ARITHMETIC = 5;
  92.    public static final int ERR_INVALID_DATA = 6;
  93.    public static final int ERR_EXPECT_EQUAL_OPERATOR = 7;
  94.    public static final int EXP_ERR_EXPECT_OPEN_BRACKET = 8;
  95.    public static final int EXP_ERR_EXPECT_CLOSE_BRACKET = 9;
  96.    public static final int EXP_ERR_PARAM_EXPECTED = 10;
  97.    public static final String[] strDefVariables = new String[]{"CourseTitle", "StudentName", "StudentID", "NoOfQuestions", "QuestionsAnswered", "QuestionsCorrect", "QuestionsWrong", "QuestionsRepeated", "PercentageCorrect", "ActualTime", "ActualDate", "CourseTime", "TaskTag", "ErrorMessage", "ErrorNumber", "ClickX", "ClickY", "ReleaseX", "ReleaseY", "ObjectFromX", "ObjectFromY", "ObjectToX", "ObjectToY", "DragScaleValue", "DraggedObjectName", "CurrentTaskTag", "PreviousTaskTag", "CR", "QuestionTime"};
  98.    public static final String[] strFunctions = new String[]{"LowerCase", "UpperCase", "StringLength", "SubString", "StripTrailing", "StripLeading", "Find", "ReverseFind", "Replace", "GetElement", "FindElement", "DeleteElement", "ReplaceElement", "InsertElement", "ElementCount", "Random", "GetCurrentDate", "GetYear", "GetMonth", "GetMonthName", "GetDay", "GetDayName", "GetHour", "GetMinutes", "GetSeconds", "GotoTask", "IfThen", "IfThenElse", "PlaySound", "Abs", "Int", "Sqrt", "Mod", "RoundUp", "RoundDown", "Cos", "Sin", "Tan", "Acos", "Asin", "Atan", "Exp", "Log", "GetObjectWidth", "GetObjectHeight", "RedrawWindow", "ReloadObject"};
  99.    public static final String[] strErrorCodes = new String[]{"Expression OK", "no data", "an invalid relational operator", "an invalid logical operator", "missing or invalid data", "an invalid arithmetic operator", "invalid data", "a missing '='", "a missing '('", "a missing ')'", "a missing or invalid function parameter"};
  100.    public static final String[] strRelational = new String[]{"<>", ">=", ">", "<=", "<", "="};
  101.    public static final String[] strArithmetic = new String[]{"+", "-", "*", "/", "^"};
  102.    public static final String[] strLogical = new String[]{"and", "or"};
  103.    CVariableList m_VariableList = new CVariableList();
  104.    CVariableList m_GlobalVariableList = new CVariableList();
  105.    boolean m_bLocalTable;
  106.    String m_strBuffer = "";
  107.    int m_nCurrentIndex;
  108.    int m_nErrorCode;
  109.  
  110.    boolean CheckExpression(String var1, boolean var2) {
  111.       boolean var3 = false;
  112.       boolean var4 = false;
  113.       this.m_strBuffer = var1;
  114.       this.m_nCurrentIndex = 0;
  115.       if (this.GetNextChar() != 0) {
  116.          var3 = this.CheckVariableGroup(var2);
  117.       }
  118.  
  119.       if (this.m_nErrorCode != 0) {
  120.          this.ReportError();
  121.       }
  122.  
  123.       return var3;
  124.    }
  125.  
  126.    boolean LoadFromFile(DataInputStream var1) {
  127.       short var2 = 0;
  128.       FileLoad.ReadClass(var1);
  129.       CVariable var4 = new CVariable();
  130.       var2 = FileLoad.ReadCPlusShort(var1);
  131.  
  132.       for(int var5 = 0; var5 < var2; ++var5) {
  133.          var4.LoadFromFile(var1);
  134.          if (var4.IsProtected() == 0) {
  135.             CVariable var3 = new CVariable();
  136.             var3.Copy(var4);
  137.             if (var3.IsGlobal() != 0) {
  138.                this.m_GlobalVariableList.AddTail(var3);
  139.                if (Globals.thePresView.m_VariableTable.FindVariable(var3) == null) {
  140.                   var3 = new CVariable();
  141.                   var3.Copy(var4);
  142.                   Globals.thePresView.m_VariableTable.m_VariableList.AddTail(var3);
  143.                }
  144.             } else {
  145.                this.m_VariableList.AddTail(var3);
  146.             }
  147.          }
  148.       }
  149.  
  150.       return true;
  151.    }
  152.  
  153.    void InitVariables() {
  154.       this.m_VariableList.DeleteAll();
  155.       if (this.m_bLocalTable) {
  156.          this.AddDefaultVariable(strDefVariables[0], 256);
  157.          this.AddDefaultVariable(strDefVariables[3], 512);
  158.          this.AddDefaultVariable(strDefVariables[5], 512);
  159.          this.AddDefaultVariable(strDefVariables[6], 512);
  160.          this.AddDefaultVariable(strDefVariables[4], 512);
  161.          this.AddDefaultVariable(strDefVariables[7], 512);
  162.          this.AddDefaultVariable(strDefVariables[28], 4096, false, (byte)0, (byte)1);
  163.          this.AddDefaultVariable(strDefVariables[8], 512);
  164.          this.AddDefaultVariable(strDefVariables[12], 1024);
  165.          this.AddDefaultVariable(strDefVariables[25], 512);
  166.          this.AddDefaultVariable(strDefVariables[26], 512);
  167.       } else {
  168.          this.AddDefaultVariable(strDefVariables[1], 256, true);
  169.          this.AddDefaultVariable(strDefVariables[2], 256, true);
  170.          this.AddDefaultVariable(strDefVariables[9], 2048, true, (byte)0, (byte)5);
  171.          this.AddDefaultVariable(strDefVariables[10], 2048, true, (byte)0, (byte)3);
  172.          this.AddDefaultVariable(strDefVariables[11], 2048, true, (byte)0, (byte)6);
  173.          this.AddDefaultVariable(strDefVariables[13], 256, true);
  174.          this.AddDefaultVariable(strDefVariables[14], 1024, true);
  175.          this.AddDefaultVariable(strDefVariables[15], 1024, true);
  176.          this.AddDefaultVariable(strDefVariables[16], 1024, true);
  177.          this.AddDefaultVariable(strDefVariables[17], 1024, true);
  178.          this.AddDefaultVariable(strDefVariables[18], 1024, true);
  179.          this.AddDefaultVariable(strDefVariables[19], 1024, true);
  180.          this.AddDefaultVariable(strDefVariables[20], 1024, true);
  181.          this.AddDefaultVariable(strDefVariables[21], 1024, true);
  182.          this.AddDefaultVariable(strDefVariables[22], 1024, true);
  183.          this.AddDefaultVariable(strDefVariables[23], 512, true);
  184.          this.AddDefaultVariable(strDefVariables[24], 256, true);
  185.          this.AddDefaultVariable(strDefVariables[27], 256, true);
  186.       }
  187.    }
  188.  
  189.    void DeleteVariables() {
  190.       this.m_VariableList.DeleteAll();
  191.       this.m_GlobalVariableList.DeleteAll();
  192.    }
  193.  
  194.    int FindElement(String var1, String var2, String var3) {
  195.       int var4 = -1;
  196.       var3 = var3.equals("") ? "\n\r" : var3;
  197.       StringTokenizer var5 = new StringTokenizer(var1, var3);
  198.       int var6 = var5.countTokens();
  199.  
  200.       for(int var7 = 1; var4 == -1 && var7 <= var6; ++var7) {
  201.          if (var5.nextToken().equals(var2)) {
  202.             var4 = var7;
  203.          }
  204.       }
  205.  
  206.       return var4;
  207.    }
  208.  
  209.    CVariable CalcFunction(int var1, boolean var2) {
  210.       boolean var3 = false;
  211.       CVariable var4 = new CVariable();
  212.       if (this.GetNextChar() != '(') {
  213.          this.m_nErrorCode = 8;
  214.       } else {
  215.          ++this.m_nCurrentIndex;
  216.          switch (var1) {
  217.             case 0:
  218.             case 1:
  219.             case 2:
  220.             case 4:
  221.             case 5:
  222.             case 15:
  223.             case 29:
  224.             case 30:
  225.             case 31:
  226.             case 33:
  227.             case 34:
  228.             case 35:
  229.             case 36:
  230.             case 37:
  231.             case 38:
  232.             case 39:
  233.             case 40:
  234.             case 41:
  235.             case 42:
  236.             case 43:
  237.             case 44:
  238.             case 46:
  239.                var4 = this.ExecuteFunction(var1, 1, 0, var2);
  240.                break;
  241.             case 3:
  242.             case 10:
  243.                var4 = this.ExecuteFunction(var1, 2, 1, var2);
  244.                break;
  245.             case 6:
  246.             case 7:
  247.             case 32:
  248.                var4 = this.ExecuteFunction(var1, 2, 0, var2);
  249.                break;
  250.             case 8:
  251.                var4 = this.ExecuteFunction(var1, 3, 0, var2);
  252.                break;
  253.             case 9:
  254.             case 11:
  255.                var4 = this.ExecuteFunction(var1, 2, 2, var2);
  256.                break;
  257.             case 12:
  258.             case 13:
  259.                var4 = this.ExecuteFunction(var1, 3, 1, var2);
  260.                break;
  261.             case 14:
  262.             case 28:
  263.                var4 = this.ExecuteFunction(var1, 1, 1, var2);
  264.                break;
  265.             case 16:
  266.             case 45:
  267.                var4 = this.ExecuteFunction(var1, 0, 0, var2);
  268.                break;
  269.             case 17:
  270.             case 18:
  271.             case 19:
  272.             case 20:
  273.             case 21:
  274.             case 22:
  275.             case 23:
  276.             case 24:
  277.                var4 = this.ExecuteFunction(var1, 0, 1, var2);
  278.                break;
  279.             case 25:
  280.             default:
  281.                System.out.println("The requested function is not presently supported in the Java version, Function ID: " + var1);
  282.                break;
  283.             case 26:
  284.             case 27:
  285.                var4 = this.IfThenElse(var1, var2);
  286.          }
  287.       }
  288.  
  289.       return var4;
  290.    }
  291.  
  292.    CVariable ExecuteFunction(int var1, int var2, int var3, boolean var4) {
  293.       CVariable[] var5 = new CVariable[4];
  294.       int var6 = 0;
  295.       char var7 = '\u0000';
  296.       int var8 = var2 + var3;
  297.       if (var8 <= 4 && var8 > 0) {
  298.          for(int var9 = 0; var9 < var8 && this.m_nErrorCode == 0; ++var9) {
  299.             var7 = this.GetNextChar();
  300.             if ((var5[var9] = this.GetData(var4)) == null) {
  301.                if (var2 != 0) {
  302.                   this.m_nErrorCode = 10;
  303.                }
  304.             } else {
  305.                ++var6;
  306.             }
  307.  
  308.             if (this.m_nErrorCode == 0) {
  309.                var7 = this.GetNextChar();
  310.                if (var9 < var2 - 1) {
  311.                   if (var7 == ',') {
  312.                      ++this.m_nCurrentIndex;
  313.                   } else {
  314.                      this.m_nErrorCode = 10;
  315.                   }
  316.                } else if (var7 == ',') {
  317.                   ++this.m_nCurrentIndex;
  318.                } else {
  319.                   if (var7 == ')') {
  320.                      ++this.m_nCurrentIndex;
  321.                      break;
  322.                   }
  323.  
  324.                   this.m_nErrorCode = 9;
  325.                }
  326.             }
  327.          }
  328.       }
  329.  
  330.       if (var4) {
  331.          if (var5[0] == null) {
  332.             var5[0] = new CVariable();
  333.          }
  334.  
  335.          var5[0].m_dValue = (double)0.0F;
  336.          var5[0].SetType(512);
  337.          System.out.println("Only validating, function will NOT be executed");
  338.       } else if (this.m_nErrorCode == 0) {
  339.          switch (var1) {
  340.             case 0:
  341.                var5[0].m_strValue = var5[0].m_strValue.toLowerCase();
  342.                var5[0].SetType(256);
  343.                break;
  344.             case 1:
  345.                var5[0].m_strValue = var5[0].m_strValue.toUpperCase();
  346.                var5[0].SetType(256);
  347.                break;
  348.             case 2:
  349.                var5[0].m_dValue = (double)var5[0].m_strValue.length();
  350.                var5[0].SetType(512);
  351.                break;
  352.             case 3:
  353.                if ((int)var5[1].m_dValue >= 0 && (int)var5[1].m_dValue < var5[0].m_strValue.length()) {
  354.                   if (var6 == 3) {
  355.                      int var17;
  356.                      if ((int)var5[2].m_dValue > 0) {
  357.                         var17 = (int)var5[1].m_dValue + (int)var5[2].m_dValue;
  358.                      } else {
  359.                         var17 = (int)var5[1].m_dValue + 1;
  360.                      }
  361.  
  362.                      if (var17 <= var5[0].m_strValue.length()) {
  363.                         var5[0].m_strValue = var5[0].m_strValue.substring((int)var5[1].m_dValue, var17);
  364.                      } else {
  365.                         var5[0].m_strValue = var5[0].m_strValue.substring((int)var5[1].m_dValue);
  366.                      }
  367.                   } else {
  368.                      var5[0].m_strValue = var5[0].m_strValue.substring((int)var5[1].m_dValue);
  369.                   }
  370.                }
  371.  
  372.                var5[0].SetType(256);
  373.                break;
  374.             case 4:
  375.                while(var5[0].m_strValue.endsWith(" ")) {
  376.                   var5[0].m_strValue = var5[0].m_strValue.substring(0, var5[0].m_strValue.length() - 1);
  377.                }
  378.  
  379.                var5[0].SetType(256);
  380.                break;
  381.             case 5:
  382.                int var10;
  383.                for(var10 = 0; this.SafeCharAt(var5[0].m_strValue, var10) == ' '; ++var10) {
  384.                }
  385.  
  386.                if (var10 < var5[0].m_strValue.length()) {
  387.                   var5[0].m_strValue = var5[0].m_strValue.substring(var10);
  388.                } else {
  389.                   var5[0].m_strValue = "";
  390.                }
  391.  
  392.                var5[0].SetType(256);
  393.                break;
  394.             case 6:
  395.                var5[0].m_dValue = (double)var5[0].m_strValue.indexOf(var5[1].m_strValue) + (double)1.0F;
  396.                var5[0].SetType(512);
  397.                break;
  398.             case 7:
  399.                var5[0].m_dValue = (double)var5[0].m_strValue.lastIndexOf(var5[1].m_strValue) + (double)1.0F;
  400.                var5[0].SetType(512);
  401.                break;
  402.             case 8:
  403.                var5[0].m_strValue = Utils.InsertStringInString(var5[0].m_strValue, var5[1].m_strValue, var5[2].m_strValue);
  404.                var5[0].SetType(256);
  405.                break;
  406.             case 9:
  407.                if (var5[2] == null) {
  408.                   var5[2] = new CVariable();
  409.                   var5[2] = var5[1];
  410.                }
  411.  
  412.                if (var5[3] == null) {
  413.                   var5[3] = new CVariable();
  414.                   var5[3].SetType(256);
  415.                }
  416.  
  417.                var5[0].m_strValue = this.GetElement(var5[0].m_strValue, (int)var5[1].m_dValue, (int)var5[2].m_dValue, var5[3].m_strValue);
  418.                var5[0].SetType(256);
  419.                break;
  420.             case 10:
  421.                if (var5[2] == null) {
  422.                   var5[2] = new CVariable();
  423.                   var5[2].SetType(256);
  424.                }
  425.  
  426.                var5[0].m_dValue = (double)this.FindElement(var5[0].m_strValue, var5[1].m_strValue, var5[2].m_strValue);
  427.                var5[0].SetType(512);
  428.                break;
  429.             case 11:
  430.                if (var5[2] == null) {
  431.                   var5[2] = new CVariable();
  432.                   var5[2] = var5[1];
  433.                }
  434.  
  435.                if (var5[3] == null) {
  436.                   var5[3] = new CVariable();
  437.                   var5[3].SetType(256);
  438.                }
  439.  
  440.                var5[0].m_strValue = this.DeleteElement(var5[0].m_strValue, (int)var5[1].m_dValue, (int)var5[2].m_dValue, var5[3].m_strValue);
  441.                var5[0].SetType(256);
  442.                break;
  443.             case 12:
  444.                if (var5[3] == null) {
  445.                   var5[3] = new CVariable();
  446.                   var5[3].SetType(256);
  447.                }
  448.  
  449.                var5[0].m_strValue = this.ReplaceElement(var5[0].m_strValue, (int)var5[1].m_dValue, var5[2].m_strValue, var5[3].m_strValue);
  450.                var5[0].SetType(256);
  451.                break;
  452.             case 13:
  453.                if (var5[3] == null) {
  454.                   var5[3] = new CVariable();
  455.                   var5[3].SetType(256);
  456.                }
  457.  
  458.                var5[0].m_strValue = this.InsertElement(var5[0].m_strValue, (int)var5[1].m_dValue, var5[2].m_strValue, var5[3].m_strValue);
  459.                var5[0].SetType(256);
  460.                break;
  461.             case 14:
  462.                if (var5[1] == null) {
  463.                   var5[1] = new CVariable();
  464.                   var5[1].SetType(256);
  465.                }
  466.  
  467.                var5[0].m_dValue = (double)this.ElementCount(var5[0].m_strValue, var5[1].m_strValue);
  468.                var5[0].SetType(512);
  469.                break;
  470.             case 15:
  471.                Random var16 = new Random();
  472.                var5[0].m_dValue *= var16.nextDouble();
  473.                var5[0].SetType(512);
  474.                break;
  475.             case 16:
  476.                var5[0].m_dateValue = new Date();
  477.                var5[0].SetType(2048);
  478.                break;
  479.             case 17:
  480.                if (var5[0] == null) {
  481.                   var5[0] = new CVariable();
  482.                }
  483.  
  484.                if (var5[0].m_dateValue == null) {
  485.                   var5[0].m_dateValue = new Date();
  486.                }
  487.  
  488.                var5[0].m_dValue = (double)(var5[0].m_dateValue.getYear() + 1900);
  489.                var5[0].SetType(512);
  490.                break;
  491.             case 18:
  492.                if (var5[0] == null) {
  493.                   var5[0] = new CVariable();
  494.                }
  495.  
  496.                if (var5[0].m_dateValue == null) {
  497.                   var5[0].m_dateValue = new Date();
  498.                }
  499.  
  500.                var5[0].m_dValue = (double)(var5[0].m_dateValue.getMonth() + 1);
  501.                var5[0].SetType(512);
  502.                break;
  503.             case 19:
  504.                if (var5[0] == null) {
  505.                   var5[0] = new CVariable();
  506.                }
  507.  
  508.                if (var5[0].m_dateValue == null) {
  509.                   var5[0].m_dateValue = new Date();
  510.                }
  511.  
  512.                var5[0].m_strValue = var5[0].GetDateValue(var5[0].m_dateValue, 3);
  513.                var5[0].SetType(256);
  514.                break;
  515.             case 20:
  516.                if (var5[0] == null) {
  517.                   var5[0] = new CVariable();
  518.                }
  519.  
  520.                if (var5[0].m_dateValue == null) {
  521.                   var5[0].m_dateValue = new Date();
  522.                }
  523.  
  524.                var5[0].m_dValue = (double)var5[0].m_dateValue.getDate();
  525.                var5[0].SetType(512);
  526.                break;
  527.             case 21:
  528.                if (var5[0] == null) {
  529.                   var5[0] = new CVariable();
  530.                }
  531.  
  532.                if (var5[0].m_dateValue == null) {
  533.                   var5[0].m_dateValue = new Date();
  534.                }
  535.  
  536.                var5[0].m_strValue = var5[0].GetDateValue(var5[0].m_dateValue, 0);
  537.                var5[0].SetType(256);
  538.                break;
  539.             case 22:
  540.                if (var5[0] == null) {
  541.                   var5[0] = new CVariable();
  542.                }
  543.  
  544.                if (var5[0].m_dateValue == null) {
  545.                   var5[0].m_dateValue = new Date();
  546.                }
  547.  
  548.                var5[0].m_dValue = (double)var5[0].m_dateValue.getHours();
  549.                var5[0].SetType(512);
  550.                break;
  551.             case 23:
  552.                if (var5[0] == null) {
  553.                   var5[0] = new CVariable();
  554.                }
  555.  
  556.                if (var5[0].m_dateValue == null) {
  557.                   var5[0].m_dateValue = new Date();
  558.                }
  559.  
  560.                var5[0].m_dValue = (double)var5[0].m_dateValue.getMinutes();
  561.                var5[0].SetType(512);
  562.                break;
  563.             case 24:
  564.                if (var5[0] == null) {
  565.                   var5[0] = new CVariable();
  566.                }
  567.  
  568.                if (var5[0].m_dateValue == null) {
  569.                   var5[0].m_dateValue = new Date();
  570.                }
  571.  
  572.                var5[0].m_dValue = (double)var5[0].m_dateValue.getSeconds();
  573.                var5[0].SetType(512);
  574.             case 25:
  575.                break;
  576.             case 26:
  577.             case 27:
  578.             default:
  579.                var5[0].SetType(512);
  580.                break;
  581.             case 28:
  582.                AudioClip var11 = Globals.thePresView.getAudioClip(Globals.thePresView.getCodeBase(), var5[0].m_strValue);
  583.                var11.play();
  584.                break;
  585.             case 29:
  586.                var5[0].m_dValue = Math.abs(var5[0].m_dValue);
  587.                var5[0].SetType(512);
  588.                break;
  589.             case 30:
  590.                var5[0].m_dValue = (double)((int)var5[0].m_dValue);
  591.                var5[0].SetType(512);
  592.                break;
  593.             case 31:
  594.                var5[0].m_dValue = Math.sqrt(Math.abs(var5[0].m_dValue));
  595.                var5[0].SetType(512);
  596.                break;
  597.             case 32:
  598.                var5[0].m_dValue %= var5[1].m_dValue;
  599.                var5[0].SetType(512);
  600.                break;
  601.             case 33:
  602.                var5[0].m_dValue = Math.ceil(var5[0].m_dValue);
  603.                var5[0].SetType(512);
  604.                break;
  605.             case 34:
  606.                var5[0].m_dValue = Math.floor(var5[0].m_dValue);
  607.                var5[0].SetType(512);
  608.                break;
  609.             case 35:
  610.                var5[0].m_dValue = Math.cos(var5[0].m_dValue);
  611.                var5[0].SetType(512);
  612.                break;
  613.             case 36:
  614.                var5[0].m_dValue = Math.sin(var5[0].m_dValue);
  615.                var5[0].SetType(512);
  616.                break;
  617.             case 37:
  618.                var5[0].m_dValue = Math.tan(var5[0].m_dValue);
  619.                var5[0].SetType(512);
  620.                break;
  621.             case 38:
  622.                var5[0].m_dValue = Math.acos(var5[0].m_dValue);
  623.                var5[0].SetType(512);
  624.                break;
  625.             case 39:
  626.                var5[0].m_dValue = Math.asin(var5[0].m_dValue);
  627.                var5[0].SetType(512);
  628.                break;
  629.             case 40:
  630.                var5[0].m_dValue = Math.atan(var5[0].m_dValue);
  631.                var5[0].SetType(512);
  632.                break;
  633.             case 41:
  634.                var5[0].m_dValue = Math.exp(var5[0].m_dValue);
  635.                var5[0].SetType(512);
  636.                break;
  637.             case 42:
  638.                if (var5[0].m_dValue > (double)0.0F) {
  639.                   var5[0].m_dValue = Math.log(var5[0].m_dValue);
  640.                }
  641.  
  642.                var5[0].SetType(512);
  643.                break;
  644.             case 43:
  645.                CDrawObj var19 = Globals.thePresView.FindDrawObject(var5[0].m_strValue);
  646.                if (var19 != null) {
  647.                   var5[0].m_dValue = (double)var19.GetActualRect().width;
  648.                }
  649.  
  650.                var5[0].SetType(512);
  651.                break;
  652.             case 44:
  653.                CDrawObj var18 = Globals.thePresView.FindDrawObject(var5[0].m_strValue);
  654.                if (var18 != null) {
  655.                   var5[0].m_dValue = (double)var18.GetActualRect().height;
  656.                }
  657.  
  658.                var5[0].SetType(512);
  659.                break;
  660.             case 45:
  661.                Globals.thePresView.Render((CRect)null);
  662.                Globals.thePresView.Draw((Graphics)null, (CRect)null);
  663.                break;
  664.             case 46:
  665.                CIconObject var12 = null;
  666.                CDrawObj var13 = Globals.thePresView.FindDrawObject(var5[0].m_strValue);
  667.                if (var13 != null) {
  668.                   var12 = var13.GetIconObject();
  669.                }
  670.  
  671.                if (var12 != null) {
  672.                   var12.DoAction();
  673.                   var12.SetResponse();
  674.                   Globals.thePresView.InvalObj(var13);
  675.                   Globals.thePresView.RenderAndDrawDirtyList();
  676.                }
  677.  
  678.                var5[0].m_dValue = (double)0.0F;
  679.                var5[0].SetType(512);
  680.          }
  681.       } else {
  682.          this.ReportError();
  683.          if (var5[0] == null) {
  684.             var5[0] = new CVariable();
  685.          }
  686.  
  687.          var5[0].m_dValue = (double)0.0F;
  688.          var5[0].SetType(512);
  689.       }
  690.  
  691.       return var5[0];
  692.    }
  693.  
  694.    String GetElement(String var1, int var2, int var3, String var4) {
  695.       String var5 = "";
  696.       var4 = var4.equals("") ? "\n\r" : var4;
  697.       StringTokenizer var6 = new StringTokenizer(var1, var4);
  698.       int var7 = var6.countTokens();
  699.       if (var7 >= var2 && var2 > 0) {
  700.          int var8;
  701.          for(var8 = 1; var8 < var2; ++var8) {
  702.             var6.nextToken();
  703.          }
  704.  
  705.          if (var3 != 0 && var3 > var2 && var7 >= var3) {
  706.             while(var8 <= var3) {
  707.                var5 = var5 + var6.nextToken();
  708.                var5 = var5 + var4;
  709.                ++var8;
  710.             }
  711.          } else {
  712.             var5 = var5 + var6.nextToken();
  713.          }
  714.       }
  715.  
  716.       return var5;
  717.    }
  718.  
  719.    String ReplaceElement(String var1, int var2, String var3, String var4) {
  720.       String var5 = "";
  721.       var4 = var4.equals("") ? "\n\r" : var4;
  722.       StringTokenizer var6 = new StringTokenizer(var1, var4);
  723.       int var7 = var6.countTokens();
  724.       if (var2 <= var7 && var2 > 0) {
  725.          int var8;
  726.          for(var8 = 1; var8 < var2; ++var8) {
  727.             var5 = var5 + var6.nextToken();
  728.             var5 = var5 + var4;
  729.          }
  730.  
  731.          var5 = var5 + var3;
  732.          var5 = var5 + var4;
  733.          var6.nextToken();
  734.          ++var8;
  735.  
  736.          while(var8 <= var7) {
  737.             var5 = var5 + var6.nextToken();
  738.             var5 = var5 + var4;
  739.             ++var8;
  740.          }
  741.       }
  742.  
  743.       return var5;
  744.    }
  745.  
  746.    int ElementCount(String var1, String var2) {
  747.       var2 = var2.equals("") ? "\n\r" : var2;
  748.       StringTokenizer var3 = new StringTokenizer(var1, var2);
  749.       return var3.countTokens();
  750.    }
  751.  
  752.    CVariable FindVariable(String var1) {
  753.       CVariable var2 = null;
  754.       boolean var3 = false;
  755.  
  756.       try {
  757.          var2 = this.m_VariableList.GetHead();
  758.       } catch (NoSuchElementException var5) {
  759.          var3 = true;
  760.       }
  761.  
  762.       while(!var3) {
  763.          if (var2 != null && var2.m_strName.equals(var1)) {
  764.             return var2;
  765.          }
  766.  
  767.          try {
  768.             var2 = this.m_VariableList.GetNext();
  769.          } catch (NoSuchElementException var4) {
  770.             var3 = true;
  771.          }
  772.       }
  773.  
  774.       return null;
  775.    }
  776.  
  777.    CVariable FindVariable(CVariable var1) {
  778.       CVariable var2 = null;
  779.       boolean var3 = false;
  780.  
  781.       try {
  782.          var2 = this.m_VariableList.GetHead();
  783.       } catch (NoSuchElementException var5) {
  784.          var3 = true;
  785.       }
  786.  
  787.       while(!var3) {
  788.          if (var2 != null && var2.GetID() == var1.GetID()) {
  789.             return var2;
  790.          }
  791.  
  792.          try {
  793.             var2 = this.m_VariableList.GetNext();
  794.          } catch (NoSuchElementException var4) {
  795.             var3 = true;
  796.          }
  797.       }
  798.  
  799.       return null;
  800.    }
  801.  
  802.    CVariable FindVariable(int var1) {
  803.       CVariable var2 = null;
  804.       boolean var3 = false;
  805.  
  806.       try {
  807.          var2 = this.m_VariableList.GetHead();
  808.       } catch (NoSuchElementException var5) {
  809.          var3 = true;
  810.       }
  811.  
  812.       while(!var3) {
  813.          if (var2 != null && var2.GetID() == var1) {
  814.             return var2;
  815.          }
  816.  
  817.          try {
  818.             var2 = this.m_VariableList.GetNext();
  819.          } catch (NoSuchElementException var4) {
  820.             var3 = true;
  821.          }
  822.       }
  823.  
  824.       return null;
  825.    }
  826.  
  827.    void SetDefaultVariables() {
  828.       if (this.m_bLocalTable) {
  829.          CVariable var1 = Utils.SearchAllVariables(strDefVariables[0]);
  830.          if (var1 != null && Globals.CUR_COURSE != null) {
  831.             var1.SetValue(Globals.CUR_COURSE.m_IconObject.GetText());
  832.             return;
  833.          }
  834.       } else {
  835.          CVariable var2 = Utils.SearchAllVariables(strDefVariables[27]);
  836.          if (var2 != null) {
  837.             var2.SetValue("\r\n");
  838.          }
  839.       }
  840.  
  841.    }
  842.  
  843.    int SetVariables(String var1, boolean var2) {
  844.       this.m_nErrorCode = 0;
  845.  
  846.       for(int var3 = 0; (this.m_strBuffer = Utils.GetLine(var1, var3)) != null && this.m_nErrorCode == 0; ++var3) {
  847.          this.m_nCurrentIndex = 0;
  848.          if (this.m_strBuffer.length() > 0 && this.SafeCharAt() != ';') {
  849.             this.ParseExpression(false, var2);
  850.          }
  851.       }
  852.  
  853.       if (this.m_nErrorCode != 0) {
  854.          this.ReportError();
  855.       }
  856.  
  857.       return this.m_nErrorCode;
  858.    }
  859.  
  860.    CVariable IfThenElse(int var1, boolean var2) {
  861.       CVariable var3 = new CVariable();
  862.       boolean var4 = false;
  863.       char var5 = '\u0000';
  864.       byte var6 = 0;
  865.       var3.SetType(512);
  866.       if (var1 == 27) {
  867.          var6 = 5;
  868.       } else {
  869.          var6 = 3;
  870.       }
  871.  
  872.       for(int var7 = 0; var7 < var6 && this.m_nErrorCode == 0; ++var7) {
  873.          var5 = this.GetNextChar();
  874.          switch (var7) {
  875.             case 0:
  876.                if (var5 == 0) {
  877.                   this.m_nErrorCode = 10;
  878.                } else {
  879.                   var4 = this.CheckVariableGroup(false);
  880.                }
  881.                break;
  882.             case 1:
  883.             case 3:
  884.                if (var5 != 0 && var5 == ',') {
  885.                   ++this.m_nCurrentIndex;
  886.                } else {
  887.                   this.m_nErrorCode = 10;
  888.                }
  889.                break;
  890.             case 2:
  891.                if (var5 == 0) {
  892.                   this.m_nErrorCode = 10;
  893.                } else if (var4) {
  894.                   var3 = this.CalcVariableGroup(var2);
  895.                } else {
  896.                   this.CalcVariableGroup(var2);
  897.                }
  898.                break;
  899.             case 4:
  900.                if (var5 == 0) {
  901.                   this.m_nErrorCode = 10;
  902.                } else if (var4) {
  903.                   this.CalcVariableGroup(var2);
  904.                } else {
  905.                   var3 = this.CalcVariableGroup(var2);
  906.                }
  907.          }
  908.       }
  909.  
  910.       if (this.m_nErrorCode != 0) {
  911.          this.ReportError();
  912.       }
  913.  
  914.       return var3;
  915.    }
  916.  
  917.    void ResetVariables() {
  918.       CVariable var1 = null;
  919.       boolean var2 = false;
  920.  
  921.       try {
  922.          var1 = this.m_VariableList.GetHead();
  923.       } catch (NoSuchElementException var4) {
  924.          var2 = true;
  925.       }
  926.  
  927.       while(!var2) {
  928.          if (var1 != null) {
  929.             var1.Reset();
  930.          }
  931.  
  932.          try {
  933.             var1 = this.m_VariableList.GetNext();
  934.          } catch (NoSuchElementException var3) {
  935.             var2 = true;
  936.          }
  937.       }
  938.  
  939.    }
  940.  
  941.    void AddDefaultVariable(String var1, int var2, boolean var3) {
  942.       this.AddDefaultVariable(var1, var2, var3, (byte)0, (byte)0);
  943.    }
  944.  
  945.    void AddDefaultVariable(String var1, int var2, boolean var3, byte var4) {
  946.       this.AddDefaultVariable(var1, var2, var3, var4, (byte)0);
  947.    }
  948.  
  949.    void AddDefaultVariable(String var1, int var2, boolean var3, byte var4, byte var5) {
  950.       CVariable var6 = new CVariable();
  951.       var6.SetName(var1);
  952.       var6.m_cDecPlaces = var4;
  953.       var6.m_cFormat = var5;
  954.       var6.m_nFlags = 0;
  955.       var6.m_nFlags |= 1;
  956.       var6.m_nFlags |= var2;
  957.       if (var3) {
  958.          var6.m_nFlags |= 2;
  959.       }
  960.  
  961.       this.m_VariableList.AddTail(var6);
  962.    }
  963.  
  964.    void AddDefaultVariable(String var1, int var2) {
  965.       this.AddDefaultVariable(var1, var2, false, (byte)0, (byte)0);
  966.    }
  967.  
  968.    CVariable GetData(boolean var1) {
  969.       boolean var2 = false;
  970.       boolean var3 = false;
  971.       char var4 = '\u0000';
  972.       String var5 = new String();
  973.       CVariable var6 = new CVariable();
  974.       this.m_nCurrentIndex = Utils.SkipSpaces(this.m_strBuffer, this.m_nCurrentIndex);
  975.  
  976.       while((var4 = this.SafeCharAt()) != 0 && !var3 && this.m_nErrorCode == 0) {
  977.          if (var2) {
  978.             switch (var4) {
  979.                case '"':
  980.                   ++this.m_nCurrentIndex;
  981.                   if (this.SafeCharAt() == '"') {
  982.                      var5 = var5 + "\"";
  983.                      ++this.m_nCurrentIndex;
  984.                   } else {
  985.                      var2 = false;
  986.                      var3 = true;
  987.                   }
  988.                   break;
  989.                default:
  990.                   var5 = var5 + String.valueOf(var4);
  991.                   ++this.m_nCurrentIndex;
  992.             }
  993.          } else {
  994.             switch (var4) {
  995.                case ' ':
  996.                case '(':
  997.                case ')':
  998.                case '*':
  999.                case '+':
  1000.                case ',':
  1001.                case '/':
  1002.                case '<':
  1003.                case '=':
  1004.                case '>':
  1005.                case '^':
  1006.                   var3 = true;
  1007.                   break;
  1008.                case '"':
  1009.                   if (var5.length() == 0) {
  1010.                      var6.SetType(256);
  1011.                      ++this.m_nCurrentIndex;
  1012.                      var2 = true;
  1013.                   } else {
  1014.                      var5 = var5 + "\"";
  1015.                      ++this.m_nCurrentIndex;
  1016.                   }
  1017.                   break;
  1018.                case '-':
  1019.                   if (var5.length() == 0) {
  1020.                      var6.SetType(512);
  1021.                      var5 = var5 + "-";
  1022.                      ++this.m_nCurrentIndex;
  1023.                   } else {
  1024.                      var3 = true;
  1025.                   }
  1026.                   break;
  1027.                case ':':
  1028.                   var6.SetType(4096);
  1029.                   var5 = var5 + ":";
  1030.                   ++this.m_nCurrentIndex;
  1031.                   break;
  1032.                default:
  1033.                   if (Character.isDigit(var4) && var5.length() == 0) {
  1034.                      var6.SetType(512);
  1035.                   }
  1036.  
  1037.                   var5 = var5 + String.valueOf(var4);
  1038.                   ++this.m_nCurrentIndex;
  1039.             }
  1040.          }
  1041.       }
  1042.  
  1043.       if (!var3) {
  1044.       }
  1045.  
  1046.       switch (var6.GetType()) {
  1047.          case 256:
  1048.             var6.SetValue(var5);
  1049.             break;
  1050.          case 512:
  1051.             try {
  1052.                var6.SetValue(Double.valueOf(var5));
  1053.             } catch (NumberFormatException var9) {
  1054.                var6.SetValue((double)0.0F);
  1055.             }
  1056.          case 2048:
  1057.          case 4096:
  1058.             break;
  1059.          default:
  1060.             CVariable var7 = Utils.SearchAllVariables(var5);
  1061.             if (var7 != null) {
  1062.                var6.Copy(var7);
  1063.             } else {
  1064.                int var8 = -1;
  1065.                if ((var8 = this.Translate(strFunctions, var5)) != -1) {
  1066.                   var6 = this.CalcFunction(var8, var1);
  1067.                } else {
  1068.                   var6 = null;
  1069.                   if (!var5.equals("")) {
  1070.                      this.m_nErrorCode = 6;
  1071.                   }
  1072.                }
  1073.             }
  1074.       }
  1075.  
  1076.       return var6;
  1077.    }
  1078.  
  1079.    boolean CheckVariableGroup(boolean var1) {
  1080.       boolean var2 = false;
  1081.       boolean var3 = false;
  1082.       boolean var4 = true;
  1083.       boolean var5 = false;
  1084.       char var6 = '\u0000';
  1085.       int var7 = -1;
  1086.       var6 = this.GetNextChar();
  1087.  
  1088.       while(var6 != 0 && var6 != ',' && this.m_nErrorCode == 0 && !var5) {
  1089.          if (var6 == ')') {
  1090.             ++this.m_nCurrentIndex;
  1091.             var5 = true;
  1092.          } else {
  1093.             if (var4) {
  1094.                if (var6 == '(') {
  1095.                   ++this.m_nCurrentIndex;
  1096.                   var3 = this.CheckVariableGroup(var1);
  1097.                } else {
  1098.                   var3 = this.GetRelation(var1);
  1099.                }
  1100.  
  1101.                if (this.m_nErrorCode == 0) {
  1102.                   switch (var7) {
  1103.                      case -1:
  1104.                         var2 = var3;
  1105.                         break;
  1106.                      case 0:
  1107.                         if (var2 && var3) {
  1108.                            var2 = true;
  1109.                         } else {
  1110.                            var2 = false;
  1111.                         }
  1112.                         break;
  1113.                      case 1:
  1114.                         if (!var2 && !var3) {
  1115.                            var2 = false;
  1116.                         } else {
  1117.                            var2 = true;
  1118.                         }
  1119.                   }
  1120.                }
  1121.             } else {
  1122.                String var8 = this.GetToken().toLowerCase();
  1123.                if ((var7 = this.Translate(strLogical, var8)) == -1) {
  1124.                   this.m_nErrorCode = 3;
  1125.                }
  1126.             }
  1127.  
  1128.             var4 = !var4;
  1129.             var6 = this.GetNextChar();
  1130.          }
  1131.       }
  1132.  
  1133.       return var2;
  1134.    }
  1135.  
  1136.    int Translate(String[] var1, String var2) {
  1137.       String var3 = new String();
  1138.       int var4 = -1;
  1139.  
  1140.       do {
  1141.          ++var4;
  1142.  
  1143.          try {
  1144.             var3 = var1[var4];
  1145.          } catch (ArrayIndexOutOfBoundsException var5) {
  1146.             var4 = -1;
  1147.          }
  1148.       } while(!var3.equals(var2) && var4 != -1);
  1149.  
  1150.       return var4;
  1151.    }
  1152.  
  1153.    void SetError(int var1, String var2) {
  1154.       CVariable var3 = Utils.SearchAllVariables(strDefVariables[14]);
  1155.       if (var3 != null) {
  1156.          var3.SetValue(var1);
  1157.       }
  1158.  
  1159.       var3 = Utils.SearchAllVariables(strDefVariables[13]);
  1160.       if (var3 != null) {
  1161.          if (var2 != null) {
  1162.             var3.SetValue(var2);
  1163.             return;
  1164.          }
  1165.  
  1166.          var3.SetValue("");
  1167.       }
  1168.  
  1169.    }
  1170.  
  1171.    char GetNextChar() {
  1172.       this.m_nCurrentIndex = Utils.SkipSpaces(this.m_strBuffer, this.m_nCurrentIndex);
  1173.       return this.SafeCharAt();
  1174.    }
  1175.  
  1176.    void DeleteTemporaryVariables() {
  1177.       CVariable var1 = null;
  1178.       boolean var2 = false;
  1179.  
  1180.       try {
  1181.          var1 = this.m_VariableList.GetHead();
  1182.       } catch (NoSuchElementException var4) {
  1183.          var2 = true;
  1184.       }
  1185.  
  1186.       while(!var2) {
  1187.          if (var1 != null && (var1.GetFlags() & 4) != 0) {
  1188.             this.m_VariableList.Delete(var1);
  1189.          }
  1190.  
  1191.          try {
  1192.             var1 = this.m_VariableList.GetNext();
  1193.          } catch (NoSuchElementException var3) {
  1194.             var2 = true;
  1195.          }
  1196.       }
  1197.  
  1198.    }
  1199.  
  1200.    char SafeCharAt() {
  1201.       return this.SafeCharAt(this.m_strBuffer, this.m_nCurrentIndex);
  1202.    }
  1203.  
  1204.    char SafeCharAt(String var1, int var2) {
  1205.       char var3 = 0;
  1206.       if (var1 != null && var2 < var1.length()) {
  1207.          var3 = var1.charAt(var2);
  1208.       }
  1209.  
  1210.       return var3;
  1211.    }
  1212.  
  1213.    String GetToken() {
  1214.       String var2 = "";
  1215.  
  1216.       for(char var1 = this.GetNextChar(); var1 != ' ' && var1 != ')' && var1 != '(' && var1 != '=' && var1 != '+' && var1 != '-' && var1 != '*' && var1 != '/' && var1 != ',' && var1 != 0; var1 = this.SafeCharAt()) {
  1217.          var2 = var2 + String.valueOf(var1);
  1218.          ++this.m_nCurrentIndex;
  1219.       }
  1220.  
  1221.       return var2;
  1222.    }
  1223.  
  1224.    String GetOperator() {
  1225.       String var1 = "";
  1226.  
  1227.       for(char var2 = this.GetNextChar(); var2 == '<' || var2 == '=' || var2 == '>'; var2 = this.SafeCharAt()) {
  1228.          var1 = var1 + String.valueOf(var2);
  1229.          ++this.m_nCurrentIndex;
  1230.       }
  1231.  
  1232.       return var1;
  1233.    }
  1234.  
  1235.    boolean GetRelation(boolean var1) {
  1236.       boolean var2 = false;
  1237.       new CVariable();
  1238.       new CVariable();
  1239.       int var5 = -1;
  1240.       CVariable var3;
  1241.       if ((var3 = this.GetData(var1)) == null) {
  1242.          this.m_nErrorCode = 4;
  1243.       } else {
  1244.          if (var3.GetType() == 1024) {
  1245.             var3.m_dValue = (double)var3.m_lValue;
  1246.             var3.SetType(512);
  1247.          }
  1248.  
  1249.          if ((var5 = this.Translate(strRelational, this.GetOperator())) == -1) {
  1250.             this.m_nErrorCode = 2;
  1251.          } else {
  1252.             CVariable var4;
  1253.             if ((var4 = this.GetData(var1)) == null) {
  1254.                this.m_nErrorCode = 4;
  1255.             } else {
  1256.                if (var4.GetType() == 1024) {
  1257.                   var4.m_dValue = (double)var4.m_lValue;
  1258.                   var4.SetType(512);
  1259.                }
  1260.  
  1261.                switch (var5) {
  1262.                   case 0:
  1263.                      var2 = var3.NotEqual(var4);
  1264.                      break;
  1265.                   case 1:
  1266.                      var2 = var3.MoreOrEqual(var4);
  1267.                      break;
  1268.                   case 2:
  1269.                      var2 = var3.IsMoreThan(var4);
  1270.                      break;
  1271.                   case 3:
  1272.                      var2 = var3.LessOrEqual(var4);
  1273.                      break;
  1274.                   case 4:
  1275.                      var2 = var3.IsLessThan(var4);
  1276.                      break;
  1277.                   case 5:
  1278.                      var2 = var3.Equals(var4);
  1279.                }
  1280.             }
  1281.          }
  1282.       }
  1283.  
  1284.       return var2;
  1285.    }
  1286.  
  1287.    CVariable CalcVariableGroup(boolean var1) {
  1288.       int var2 = -1;
  1289.       boolean var3 = true;
  1290.       boolean var4 = false;
  1291.       CVariable var5 = new CVariable();
  1292.       new CVariable();
  1293.       char var7;
  1294.       if ((var7 = this.GetNextChar()) == 0) {
  1295.          this.m_nErrorCode = 4;
  1296.       }
  1297.  
  1298.       while(var7 != 0 && var7 != ',' && this.m_nErrorCode == 0 && !var4) {
  1299.          if (var7 == ')') {
  1300.             ++this.m_nCurrentIndex;
  1301.             var4 = true;
  1302.          } else {
  1303.             if (var3) {
  1304.                CVariable var6;
  1305.                if (var7 == '(') {
  1306.                   ++this.m_nCurrentIndex;
  1307.                   var6 = this.CalcVariableGroup(var1);
  1308.                } else {
  1309.                   var6 = this.GetData(var1);
  1310.                }
  1311.  
  1312.                if (var6 != null && this.m_nErrorCode == 0) {
  1313.                   switch (var2) {
  1314.                      case -1:
  1315.                         var5.Copy(var6);
  1316.                         break;
  1317.                      case 0:
  1318.                         var5 = var5.Plus(var6);
  1319.                         break;
  1320.                      case 1:
  1321.                         var5 = var5.Minus(var6);
  1322.                         break;
  1323.                      case 2:
  1324.                         var5 = var5.MultipliedBy(var6);
  1325.                         break;
  1326.                      case 3:
  1327.                         var5 = var5.DividedBy(var6);
  1328.                         break;
  1329.                      case 4:
  1330.                         var5 = var5.PowerOf(var6);
  1331.                   }
  1332.                }
  1333.             } else if ((var2 = this.Translate(strArithmetic, String.valueOf(var7))) == -1) {
  1334.                this.m_nErrorCode = 5;
  1335.             } else {
  1336.                ++this.m_nCurrentIndex;
  1337.             }
  1338.  
  1339.             var3 = !var3;
  1340.             var7 = this.GetNextChar();
  1341.          }
  1342.       }
  1343.  
  1344.       return var5;
  1345.    }
  1346.  
  1347.    String DeleteElement(String var1, int var2, int var3, String var4) {
  1348.       String var5 = "";
  1349.       var4 = var4.equals("") ? "\n\r" : var4;
  1350.       StringTokenizer var6 = new StringTokenizer(var1, var4);
  1351.       int var7 = var6.countTokens();
  1352.       if (var7 >= var2 && var2 > 0) {
  1353.          int var8;
  1354.          for(var8 = 1; var8 < var2; ++var8) {
  1355.             var5 = var5 + var6.nextToken();
  1356.             var5 = var5 + var4;
  1357.          }
  1358.  
  1359.          if (var3 != 0 && var3 > var2 && var7 >= var3) {
  1360.             while(var8 <= var3) {
  1361.                var6.nextToken();
  1362.                ++var8;
  1363.             }
  1364.          } else {
  1365.             var6.nextToken();
  1366.             ++var8;
  1367.          }
  1368.  
  1369.          while(var8 <= var7) {
  1370.             var5 = var5 + var6.nextToken();
  1371.             var5 = var5 + var4;
  1372.             ++var8;
  1373.          }
  1374.       }
  1375.  
  1376.       return var5;
  1377.    }
  1378.  
  1379.    String InsertElement(String var1, int var2, String var3, String var4) {
  1380.       String var5 = "";
  1381.       var4 = var4.equals("") ? "\n\r" : var4;
  1382.       StringTokenizer var6 = new StringTokenizer(var1, var4);
  1383.       int var7 = var6.countTokens();
  1384.       if (var2 <= var7 && var2 > 0) {
  1385.          int var8;
  1386.          for(var8 = 1; var8 < var2; ++var8) {
  1387.             var5 = var5 + var6.nextToken();
  1388.             var5 = var5 + var4;
  1389.          }
  1390.  
  1391.          var5 = var5 + var3;
  1392.  
  1393.          for(var5 = var5 + var4; var8 <= var7; ++var8) {
  1394.             var5 = var5 + var6.nextToken();
  1395.             var5 = var5 + var4;
  1396.          }
  1397.       }
  1398.  
  1399.       return var5;
  1400.    }
  1401.  
  1402.    void ReportError() {
  1403.       System.out.println("The expression '" + this.m_strBuffer + "' cannot be evaluated due to " + strErrorCodes[this.m_nErrorCode]);
  1404.    }
  1405.  
  1406.    CVariableTable(boolean var1) {
  1407.       this.m_bLocalTable = var1;
  1408.       this.InitVariables();
  1409.    }
  1410.  
  1411.    CVariable ParseExpression(boolean var1, boolean var2) {
  1412.       CVariable var3 = new CVariable();
  1413.       Object var4 = null;
  1414.       String var5 = "";
  1415.       int var6 = -1;
  1416.       if ((var5 = this.GetToken()) == "") {
  1417.          this.m_nErrorCode = 1;
  1418.       } else {
  1419.          if ((var3 = Utils.SearchAllVariables(var5)) == null || var1) {
  1420.             var3 = new CVariable();
  1421.             var3.SetName(var5);
  1422.             var3.m_nFlags = 4;
  1423.             this.m_VariableList.AddTail(var3);
  1424.          }
  1425.  
  1426.          if ((var6 = this.Translate(strFunctions, var5)) != -1) {
  1427.             var3 = this.CalcFunction(var6, var2);
  1428.          } else {
  1429.             this.m_nCurrentIndex = Utils.SkipSpaces(this.m_strBuffer, this.m_nCurrentIndex);
  1430.             if (this.SafeCharAt() != '=') {
  1431.                this.m_nErrorCode = 7;
  1432.             } else {
  1433.                ++this.m_nCurrentIndex;
  1434.                CVariable var11 = this.CalcVariableGroup(var2);
  1435.                if (this.m_nErrorCode == 0) {
  1436.                   if (var3.GetType() == 0) {
  1437.                      var3.SetType(var11.GetType());
  1438.                   }
  1439.  
  1440.                   label56:
  1441.                   switch (var3.GetType()) {
  1442.                      case 256:
  1443.                         switch (var11.GetType()) {
  1444.                            case 512:
  1445.                               String var15 = var11.GetNumericValueAsString();
  1446.                               var3.SetValue(var15);
  1447.                               break label56;
  1448.                            case 1024:
  1449.                               var3.SetValue(String.valueOf(var11.GetIntegerValue()));
  1450.                               break label56;
  1451.                            default:
  1452.                               var3.SetValue(var11.GetStringValue());
  1453.                               break label56;
  1454.                         }
  1455.                      case 512:
  1456.                         switch (var11.GetType()) {
  1457.                            case 256:
  1458.                               double var14;
  1459.                               try {
  1460.                                  var14 = Double.valueOf(var11.GetStringValue());
  1461.                               } catch (NumberFormatException var9) {
  1462.                                  var14 = (double)0.0F;
  1463.                               }
  1464.  
  1465.                               var3.SetValue(var14);
  1466.                               break label56;
  1467.                            case 1024:
  1468.                               var3.SetValue((double)var11.GetIntegerValue());
  1469.                               break label56;
  1470.                            default:
  1471.                               var3.SetValue(var11.GetNumericValue());
  1472.                               break label56;
  1473.                         }
  1474.                      case 1024:
  1475.                         switch (var11.GetType()) {
  1476.                            case 256:
  1477.                               long var7;
  1478.                               try {
  1479.                                  var7 = Long.parseLong(var11.GetStringValue());
  1480.                               } catch (NumberFormatException var10) {
  1481.                                  var7 = 0L;
  1482.                               }
  1483.  
  1484.                               var3.SetValue(var7);
  1485.                               break label56;
  1486.                            case 512:
  1487.                               var3.SetValue((long)var11.GetNumericValue());
  1488.                               break label56;
  1489.                            default:
  1490.                               var3.SetValue(var11.GetIntegerValue());
  1491.                               break label56;
  1492.                         }
  1493.                      case 2048:
  1494.                         var3.m_dateValue = var11.m_dateValue;
  1495.                         break;
  1496.                      case 4096:
  1497.                         var3.m_timeSpanValue = var11.m_timeSpanValue;
  1498.                   }
  1499.  
  1500.                   if (!var2 && Globals.CUR_COURSE != null && var3.GetNumericValue() == (double)0.0F && (var3.GetName().equals(strDefVariables[5]) || var3.GetName().equals(strDefVariables[6]) || var3.GetName().equals(strDefVariables[4]) || var3.GetName().equals(strDefVariables[7]))) {
  1501.                      Globals.CUR_COURSE.ResetHistory();
  1502.                   }
  1503.                }
  1504.             }
  1505.          }
  1506.       }
  1507.  
  1508.       this.DeleteTemporaryVariables();
  1509.       return var3;
  1510.    }
  1511. }
  1512.